package main

import "fmt"

func main() {
	res := intSum(1, 2)
	fmt.Println(res)

	//匿名函数第一种使用方式
	func(n1, n2 int) int {
		fmt.Println(n1 - n2)
		return n1 - n2
	}(2, 1)

	//匿名函数第二种使用方式
	test_fun := func(n1, n2 int) int {
		return n1 - n2
	}
	res1 := test_fun(30, 10)
	fmt.Println(res1)

	//闭包
	fn := AddInt()
	fmt.Println(fn(1))
	fmt.Println(fn(1))
	fmt.Println(fn(1))
	fmt.Println(fn(1))
}

//闭包
//func(i int) int是个返回值，闭包的返回值是匿名函数
//闭包中的变量在函数调用完毕后不会销毁
func AddInt() func(i int) int {
	var num int
	return func(i int) int {
		num += 1
		return num
	}
}

//函数语法: func 函数名（接收参数） 返回值 {函数体}
//返回值（a int）
//返回值（int）
//返回值（int,error）
//返回值（a int, err error）
//返回值（a, b int）
func intSum(x, y int) (a int) {
	a = x + y
	return a
}
